/**
 * @file rgb1.c
 * @author your name (you@domain.com)
 * @brief 生成一个彩色条的RGB
 * @version 0.1
 * @date 2021-04-27
 * 
 * @copyright Copyright (c) 2021
 *  https://www.ihubin.com/blog/audio-video-basic-02-rgb-puzzle/
 */
#include <stdio.h>
#include <stdint.h>
#include <string.h>


uint32_t rainbowColors[] = {
    0XFF0000, // 红
    0XFFA500, // 橙
    0XFFFF00, // 黄
    0X00FF00, // 绿
    0X007FFF, // 青
    0X0000FF, // 蓝
    0X8B00FF  // 紫
};

void writeRainbox(char * outputFile, int width, int height);

int main(void)
{
    writeRainbox("rainbow_700x700.rgb", 700, 700);
    return 0;
}

void writeRainbox(char * outputFile, int width, int height)
{
    FILE * rgbFile = fopen(outputFile, "wb+");
    if(rgbFile == NULL) {
        printf("fopen [%s]\n", strerror(errno));
        return ;
    }

    for (int i = 0; i < width; i++)
    {
        uint32_t currentColor = 0x000000;
        if(i < 100) {
            // 前 100 行 红色
            currentColor = rainbowColors[0];
        } else if(i < 200) {
            // 100-200 行 橙色
            currentColor = rainbowColors[1];
        } else if(i < 300) {
            // 200-300 行 黄色
            currentColor = rainbowColors[2];
        } else if(i < 400) {
            // 300-400 行 绿色
            currentColor = rainbowColors[3];
        } else if(i < 500) {
            // 400-500 行 青色
            currentColor = rainbowColors[4];
        } else if(i < 600) {
            // 500-600 行 蓝色
            currentColor = rainbowColors[5];
        } else if(i < 700) {
            // 600-700 行 紫色
            currentColor = rainbowColors[6];
        }

        uint8_t R = (currentColor & 0xFF0000) >> 16;
        uint8_t G = (currentColor & 0x00FF00) >> 8;
        uint8_t B = (currentColor & 0x0000FF) >> 0;

        for (int j = 0; j < height; j++)
        {
            fputc(R, rgbFile);
            fputc(G, rgbFile);
            fputc(B, rgbFile);
        }
        /*
        前100行是一个红色区域。局域的高度为100，宽度为700
        */
    }

    fclose(rgbFile);
    
}